package de.se2.sharebox.classes;

/**
 *
 * @author Gruppe 10
 *
 */
public class User
{
	private UserAccount userAccount;

	/**
	 *
	 * mittels dieser Funktion erfolgt Einloggen
	 *
	 * @param email -
	 *          Emailadresse
	 * @param password -
	 *          Passwort
	 * @param accountDB -
	 *          Objekt-Tabelle mit den Accountsdaten
	 * @return true - erfolgreich und false - loginRegistrationController ist
	 *         nicht erfolgreich
	 *
	 */
	public boolean login(String email, String password)
	{
		for (UserAccount account : AccountsCollection.getInstance().getAccounts())
		{
			if (account.getEmailAdresse().equals(email) && account.getPasswort().equals(password))
			{
				this.setUserAccount(new UserAccount(email, password));
				return true;
			}
		}
		return false;
	}

	/**
	 *
	 * mittels dieser Funktion erfolg Registration
	 *
	 * @param userAccount -
	 *          Nutzeraccount
	 * @param accountDB -
	 *          Objekt-Tabelle mit den Accountsdaten
	 * @return true - erfolgreich und false - loginRegistrationController ist
	 *         nicht erfolgreich
	 *
	 */
	public boolean registration(UserAccount userAccount)
	{
		this.setUserAccount(userAccount);
		return AccountsCollection.getInstance().addAccount(userAccount);
	}

	public boolean logout()
	{
		this.userAccount = null;
		return true;
	}

	public boolean sendInvitation(User invitedUser, Folder folder)
	{
		Invitation invitation = new Invitation();
		invitation.sendInvitation(this.userAccount, invitedUser, folder);
		return true;
	}

	public boolean saveNewAccountsSettings(String eMail, String password)
	{
		this.userAccount.setEmailAdresse(eMail);
		this.userAccount.setPasswort(password);
		return true;
	}

	public boolean deleteAccount(String password, AccountsCollection accountDB)
	{
		if (this.userAccount != null && this.userAccount.getPasswort().equals(password))
			return accountDB.removeAccount(this.userAccount);

		return false;
	}

	public boolean expandLimit(int size)
	{
		this.userAccount.setLimit(size);
		return true;
	}

	public void setUserAccount(UserAccount userAccount)
	{
		this.userAccount = userAccount;
	}

	public UserAccount getUserAccount()
	{
		return userAccount;
	}
}
